// 引入model
const { Category } = require('../model/categories')

// 获取所有分类信息
exports.getAll = async (req, res, next) => {
  try {
    const data = await Category.find()
    res.status(200).json({
      code: 200,
      data,
      total: data.length,
      msg: '获取成功'
    })
  } catch (err) {
    next(err)
  }
}

// 添加分类信息
exports.create = async (req, res, next) => {
  try {
    // 检测是否已经存在要添加的分类信息
    const data = req.body
    let cate = await Category.findOne(data)
    if (cate) {
      return res.status(400).json({
        code: 400,
        msg: '该分类信息已存在',
        data: cate
      })
    }
    // 添加分类
    cate = new Category(data)
    // 保存信息
    await cate.save()
    return res.status(200).json({
      code: 200,
      msg: '添加成功'
    })
  } catch (err) {
    next(err)
  }
}

// 获取某个分类信息
exports.get = async (req, res, next) => {
  // 动态获取分类ID
  try {
    let id = req.params.cid
    if (!id) {
      return res.status(400).json({
        code: 400,
        msg: '_id是必须的'
      })
    }
    // 获取某个分类
    let data
    try {
      data = await Category.findById(id)
    } catch (err) {
      return res.status(400).json({
        code: 400,
        msg: 'id有误，查询不到该分类信息'
      })
    }
    if (!data) {
      return res.status(400).json({
        code: 400,
        msg: '查询错误'
      })
    }
    return res.status(200).json({
      code: 200,
      msg: '查询成功',
      data
    })
    res.send('获取分类')
  } catch (err) {
    next(err)
  }
}

// 更新分类信息
exports.update = async (req, res, next) => {
  try {
    // 检测是否有id存在
    let id = req.params.cid
    if (!id) {
      return res.status(400).json({
        code: 400,
        msg: '_id是必须的'
      })
    }
    // 根据动态路由参数进行数据更新
    let data
    try {
      data = await Category.findByIdAndUpdate(id, req.body, { new: true })
    } catch (err) {
      return res.status(200).json({
        code: 500,
        data,
        msg: '查询更新失败'
      })
    }
    res.status(200).json({
      code: 200,
      data: req.body,
      msg: '编辑成功'
    })
  } catch (err) {
    next(err)
  }
}

// 删除分类信息
exports.delete = async (req, res, next) => {
  try {
    // 检测是否有id存在
    let id = req.params.cid
    if (!id) {
      return res.status(400).json({
        code: 400,
        msg: '_id是必须的'
      })
    }
    // 删除处理
    const data = await Category.findByIdAndDelete(id)
    if(!data){
      return res.status(400).json({
        code: 400,
        msg: '删除失败'
      })
    }
    res.status(200).json({
      code: 200,
      mmsg: '删除成功'
    })
    res.send('删除分类')
  } catch (err) {
    next(err)
  }
}
